/*
 * Copyright 2007 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package org.starsource.forum.client.view;

import org.starsource.forum.client.StarForum;
import org.starsource.forum.client.domain.MessageObject;
import org.starsource.forum.client.handler.MessageUpdateHandler;
import org.starsource.forum.client.util.ImageFilter;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style.Visibility;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Widget;

/**
 * A composite for displaying the details of an email message.
 */
public class MessageDetail extends Composite {

	interface Binder extends UiBinder<Widget, MessageDetail> { }
	private static final Binder binder = GWT.create(Binder.class);

	@UiField Element author;
	@UiField HTML content;
	@UiField FileList fileList;
	@UiField Element time;
	@UiField MessageToolbar toolbar;
	@UiField ImageList imageList;

	public MessageDetail(MessageObject messageObject, MessageUpdateHandler messageUpdateHandler) {
		initWidget(binder.createAndBindUi(this));

		ImageFilter imageFilter = new ImageFilter();

		author.setInnerText(messageObject.getOwner().getName());
		content.setHTML(messageObject.getContent());
		fileList.setFileList(imageFilter.getUnsatisfied(messageObject.getResources()));
		time.setInnerText(messageObject.getUpdateTimeString());

		if (messageObject.getOwner().getId() == StarForum.getUserObject().getId()) {
			this.setMessageToolbarVisibility(true);
		} else {
			this.setMessageToolbarVisibility(false);
		}

		toolbar.setMessageObject(messageObject);
		toolbar.setMessageUpdateHandler(messageUpdateHandler);

		imageList.setImageList(imageFilter.getSatisfied(messageObject.getResources()));

	}

	private void setVisibility(Widget widget, boolean visible) {
		widget.getElement().getStyle().setVisibility(
			visible ? Visibility.VISIBLE : Visibility.HIDDEN);
	}

	private void setMessageToolbarVisibility(boolean visible) {
		this.setVisibility(toolbar, visible);
	}
}
